#include <iostream>
#include <algorithm>
using namespace std;

int n, m;  // 区间段数n, 线段条数m
int A[20]; // 区间段数组

int min_len()
{
	if (m >= n)
		return n;

	std::sort(A, A + n);
	int sum = A[n - 1] - A[0] + 1; // 总区间跨度
	int distance[20];			   // 临时数组，记录每两段之间的距离
	for (int i = 0; i < n - 1; i++)
		distance[i] = A[i + 1] - A[i] - 1;

	for (int i = m; i > 1; i--) // 求m条线段
	{
		int *max = max_element(distance, distance + n - 1);
		sum = sum - *max;
		if (*max != 0)
			*max = 0;
		else
			break;
	}

	return sum;
}

int main()
{
	system("chcp 65001");

	cout << "请输入区间段数n：";
	cin >> n;
	cout << "请输入线段条数m：";
	cin >> m;

	cout << "请输入" << n << "个区间：" << endl;
	for (int i = 0; i < n; i++)
		cin >> A[i];

	cout << m << "条线段的最小长度和为：" << min_len() << endl;

	return 0;
}

/*
请输入区间段数n：5
请输入线段条数m：3
请输入5个区间：
1 3 8 5 11
3条线段的最小长度和为：7 
*/